home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mission 3
/
Mission 3.zip
/
Mission 3.iso
/
zugabe
/
va45
/
visual45
/
library
/
extend
/
multirsc.s
< prev
next >
Wrap
Text File
|
1998-09-01
|
23KB
|
827 lines
;------------------------------------------------------------------------------
; Method name : -
; Asm label : GWVA_RSC_SAVE_TREE
; Description : Sauvegarde paramétrable d'un arbre ressource dans un buffer
;
; Rq : -
;
; in : a0.l = 0 (MALLOC automatique) ou pointeur sur un précédent champ de sauvegarde
; in : d0.w = index de l'arbre
; in : d1.w = paramétre de la sauvegarde
; GWVA_RSC_MASK_SAVE_STATE : sauve les objets RSC et le caractère des BOXCHAR
; GWVA_RSC_MASK_SAVE_TEDINFO : sauve les TEDINFO
; GWVA_RSC_MASK_SAVE_TEXT : sauve les textes non éditables sauf le caractère des icones
; GWVA_RSC_MASK_SAVE_FTEXT : sauve les textes editables (texte+mise en forme+champ de saisie)
; GWVA_RSC_MASK_SAVE_BITBLK : sauve les BITBLK
; GWVA_RSC_MASK_SAVE_ICONBLK : sauve les ICONBLK
; GWVA_RSC_MASK_SAVE_CICONBLK : sauve les CICONBLK
; GWVA_RSC_MASK_SAVE_APPLBLK : sauve les APPLBLK
; out : a0.l = pointeur sur le champ de sauvegarde
; out : d7.w = GWVA_NO_ERROR_GENERIC, ou erreur
; GWVA_ERROR_MALLOC
; GWVA_ERROR_RSC_NO_SAVE_PARAMETERS
; GWVA_ERROR_RSC_NO_TREE_IDX
; GWVA_ERROR_RSC_BUFFER_UNMATCH
;
; 23/05/98 : Création
;------------------------------------------------------------------------------
GWVA_RSC_SAVE_TREE:
tst d1
beq .pas_de_parametres
save.l d0-d1/a0
lea GWVA_RSC_TMP_ADD_TREE,a0
bsr GWVA_RSC_RETURN_PTR_ON_TREE
load.l d0-d1/a0
cmp.l #0,a0
beq.s .faire_un_malloc
cmp.w GWVA_RSC_SAVE_TREE_IDX(a0),d0
bne .pas_le_meme_tree
cmp.w GWVA_RSC_SAVE_PARAMETERS(a0),d1
bne .pas_les_memes_parametres
bra.s .deja_un_malloc
.faire_un_malloc:
move.w d1,GWVA_RSC_TMP_SAVE_PARAMETERS
clr.l GWVA_RSC_TMP_SIZE
save.w d0
move.l GWVA_RSC_TMP_ADD_TREE,a0 ; a0.l : adresse de base de l'arbre
move.l #GWVA_RSC_CALCULATE_SIZE_OBJECT,a1 ; a1.l : routine à executer à chaque objet
move.l a0,a2 ; a2.l : adresse de l'objet courant
clr.w d0 ; d0.w : numéro courant
moveq #-1,d1 ; d1.w : numéro du pére du root
bsr GWVA_RSC_GO_OVER_TREE
load.w d0
save.w d0
move.l GWVA_RSC_TMP_SIZE,d0
add.l #GWVA_RSC_SAVE_HEADER_LENGTH,d0
MXALLOC #MX_PREFTTRAM,d0
move.l d0,a0
load.w d0
cmp.l #0,a0
beq.s .pas_de_memoire
move.w d0,GWVA_RSC_SAVE_TREE_IDX(a0)
move.w GWVA_RSC_TMP_SAVE_PARAMETERS,GWVA_RSC_SAVE_PARAMETERS(a0)
move.l GWVA_RSC_TMP_SIZE,GWVA_RSC_SAVE_SIZE(a0)
.deja_un_malloc:
move.l a0,GWVA_RSC_TMP_SAVE_PTR
add.l #GWVA_RSC_SAVE_HEADER_LENGTH,GWVA_RSC_TMP_SAVE_PTR
save.l a0
move.l GWVA_RSC_TMP_ADD_TREE,a0 ; a0.l : adresse de base de l'arbre
move.l #GWVA_RSC_SAVE_OBJECT,a1 ; a1.l : routine à executer à chaque objet
move.l a0,a2 ; a2.l : adresse de l'objet courant
clr.w d0 ; d0.w : numéro courant
moveq #-1,d1 ; d1.w : numéro du pére du root
bsr GWVA_RSC_GO_OVER_TREE
load.l a0
move.w #GWVA_NO_ERROR_GENERIC,d7
rts
.pas_le_meme_tree:
.pas_les_memes_parametres:
move.w #GWVA_ERROR_RSC_BUFFER_UNMATCH,d7
rts
.pas_de_tree:
move.w #GWVA_ERROR_RSC_NO_TREE_IDX,d7
rts
.pas_de_parametres:
move.w #GWVA_ERROR_RSC_NO_SAVE_PARAMETERS,d7
rts
.pas_de_memoire:
move.w #GWVA_ERROR_MALLOC,d7
rts
;------------------------------------------------------------------------------
; Method name : -
; Asm label : GWVA_RSC_CALCULATE_SIZE_OBJECT
; Description : Calcul la taille à sauvegarder de l'objet RSC en fonction des
; Description : paramètres voulues
;
; Rq : -
;
; in : a2.l = pointeur sur l'objet RSC courant
; in : GWVA_RSC_TMP_SAVE_PARAMETER
; in : GWVA_RSC_TMP_SIZE
; out : GWVA_RSC_TMP_SIZE
; out : d7.w = GWVA_RSC_CTE_CONTINUE_GO_OVER
;
; 23/05/98 : Création
;------------------------------------------------------------------------------
GWVA_RSC_CALCULATE_SIZE_OBJECT:
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_STATE:1}
beq.s .pas_objet_de_base
add.l #L_OBJECT,GWVA_RSC_TMP_SIZE ; + moi
.pas_objet_de_base:
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_TEDINFO:1}
beq.s .pas_TEDINFO
move.l a2,a0
bsr GWVA_RSC_TEST_IF_TEDINFO_STRUCT_EXIST
cmp.w #GWVA_ERROR_GENERIC,d7
beq.s .pas_TEDINFO
add.l #L_TEDINFO,GWVA_RSC_TMP_SIZE
.pas_TEDINFO:
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_TEXT:1}
beq.s .pas_texte_normal
cmp.w #G_TEXT,ob_type(a2)
beq.s .taille_texte_normal_tedinfo
cmp.w #G_BOXTEXT,ob_type(a2)
bne.s .pas_texte_normal_text
.taille_texte_normal_tedinfo:
move.w ([a2,ob_spec],te_txtlen),d0
ext.l d0
add.l d0,GWVA_RSC_TMP_SIZE
.pas_texte_normal_text:
cmp.w #G_BUTTON,ob_type(a2)
beq.s .taille_texte_normal_string
cmp.w #G_TITLE,ob_type(a2)
beq.s .taille_texte_normal_string
cmp.w #G_STRING,ob_type(a2)
bne.s .pas_taille_texte_normal_string
.taille_texte_normal_string:
move.l ob_spec(a2),a0
bsr GWVA_COUNT_BYTES_0
add.l #1,d0 ; + 0.b
add.l d0,GWVA_RSC_TMP_SIZE
.pas_taille_texte_normal_string:
cmp.w #G_BOXCHAR,ob_type(a2)
bne.s .pas_texte_normal_boxchar
add.l #1,GWVA_RSC_TMP_SIZE
.pas_texte_normal_boxchar:
.pas_texte_normal:
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_FTEXT:1}
beq.s .pas_texte_editable
cmp.w #G_FTEXT,ob_type(a2)
beq.s .taille_texte_editable_tedinfo
cmp.w #G_FBOXTEXT,ob_type(a2)
bne.s .pas_texte_editable_text
.taille_texte_editable_tedinfo:
move.w ([a2,ob_spec],te_txtlen),d0
ext.l d0
add.l d0,GWVA_RSC_TMP_SIZE
move.w ([a2,ob_spec],te_tmplen),d0
ext.l d0
add.l d0,GWVA_RSC_TMP_SIZE
add.l d0,GWVA_RSC_TMP_SIZE
.pas_texte_editable_text:
.pas_texte_editable:
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_BITBLK:1}
beq.s .pas_BITBLK
moveq #L_BITBLK,d0
cmp.w #G_IMAGE,ob_type(a2)
bne.s .pas_image
add.l d0,GWVA_RSC_TMP_SIZE
.pas_image:
.pas_BITBLK:
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_ICONBLK:1}
beq.s .pas_ICONBLK
moveq #L_ICONBLK,d0
cmp.w #G_ICON,ob_type(a2)
bne.s .pas_icon
add.l d0,GWVA_RSC_TMP_SIZE
.pas_icon:
.pas_ICONBLK:
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_CICONBLK:1}
beq.s .pas_CICONBLK
moveq #L_CICONBLK,d0
cmp.w #G_CICON,ob_type(a2)
bne.s .pas_cicon
add.l d0,GWVA_RSC_TMP_SIZE
.pas_cicon:
.pas_CICONBLK:
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_APPLBLK:1}
beq.s .pas_APPLBLK
moveq #L_APPLBLK,d0
cmp.w #G_PROGDEF,ob_type(a2)
bne.s .pas_progdef
add.l d0,GWVA_RSC_TMP_SIZE
.pas_progdef:
.pas_APPLBLK:
move.w #GWVA_RSC_CTE_CONTINUE_GO_OVER,d7
rts
;------------------------------------------------------------------------------
; Method name : -
; Asm label : GWVA_RSC_SAVE_OBJECT
; Description : Sauvegarde l'objet RSC en fonction des paramètres voulues
;
; Rq : -
;
; in : a2.l = pointeur sur l'objet RSC courant
; in : GWVA_RSC_TMP_SAVE_PARAMETER
; in : GWVA_RSC_TMP_SAVE_PTR
; out : d7.w = GWVA_RSC_CTE_CONTINUE_GO_OVER
;
; 23/05/98 : Création
;------------------------------------------------------------------------------
GWVA_RSC_SAVE_OBJECT:
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_STATE:1}
beq.s .pas_objet_de_base
move.l GWVA_RSC_TMP_SAVE_PTR,a3
move.l a2,a4
move.w #L_OBJECT/2-1,d0
.recop_obj: move.w (a4)+,(a3)+
dbf d0,.recop_obj
move.l a3,GWVA_RSC_TMP_SAVE_PTR
.pas_objet_de_base:
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_TEDINFO:1}
beq.s .pas_TEDINFO
move.l a2,a0
bsr GWVA_RSC_TEST_IF_TEDINFO_STRUCT_EXIST
cmp.w #GWVA_ERROR_GENERIC,d7
beq.s .pas_TEDINFO
move.l GWVA_RSC_TMP_SAVE_PTR,a3
move.l ob_spec(a2),a4
move.w #L_TEDINFO/2-1,d0
.recop_tedinfo:
move.w (a4)+,(a3)+
dbf d0,.recop_tedinfo
move.l a3,GWVA_RSC_TMP_SAVE_PTR
.pas_TEDINFO:
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_TEXT:1}
beq.s .pas_texte_normal
cmp.w #G_TEXT,ob_type(a2)
beq.s .texte_normal_tedinfo
cmp.w #G_BOXTEXT,ob_type(a2)
bne.s .pas_texte_normal_tedinfo
.texte_normal_tedinfo:
move.l GWVA_RSC_TMP_SAVE_PTR,a3
move.l ob_spec(a2),a4
move.w te_txtlen(a4),d0
move.l te_ptext(a4),a4
sub.w #1,d0
bmi.s .pas_texte_normal_tedinfo
.recop_texte_normal_tedinfo:
move.b (a4)+,(a3)+
dbf d0,.recop_texte_normal_tedinfo
move.l a3,GWVA_RSC_TMP_SAVE_PTR
.pas_texte_normal_tedinfo:
cmp.w #G_BUTTON,ob_type(a2)
beq.s .texte_normal_string
cmp.w #G_TITLE,ob_type(a2)
beq.s .texte_normal_string
cmp.w #G_STRING,ob_type(a2)
bne.s .pas_texte_normal_string
.texte_normal_string:
move.l GWVA_RSC_TMP_SAVE_PTR,a3
move.l ob_spec(a2),a4
COPY_STRING_0 a4,a3
move.l a3,GWVA_RSC_TMP_SAVE_PTR
.pas_texte_normal_string:
cmp.w #G_BOXCHAR,ob_type(a2)
bne.s .pas_texte_normal_boxchar
move.l GWVA_RSC_TMP_SAVE_PTR,a3
move.b ob_spec(a2),(a3)+
move.l a3,GWVA_RSC_TMP_SAVE_PTR
.pas_texte_normal_boxchar:
.pas_texte_normal:
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_FTEXT:1}
beq.s .pas_texte_editable
cmp.w #G_FTEXT,ob_type(a2)
beq.s .texte_editable_tedinfo
cmp.w #G_FBOXTEXT,ob_type(a2)
bne.s .pas_texte_editable_text
.texte_editable_tedinfo:
move.l GWVA_RSC_TMP_SAVE_PTR,a3
move.l ob_spec(a2),a4
move.w te_txtlen(a4),d0
move.l te_ptext(a4),a4
sub.w #1,d0
bmi.s .pas_texte_editable_tedinfo_txt
.recop_texte_editable_tedinfo_txt:
move.b (a4)+,(a3)+
dbf d0,.recop_texte_editable_tedinfo_txt
.pas_texte_editable_tedinfo_txt:
move.l ob_spec(a2),a4
move.w te_tmplen(a4),d0
move.l te_pvalid(a4),a5
move.l te_ptmplt(a4),a4
sub.w #1,d0
bmi.s .pas_texte_editable_tedinfo_tmplt_valid
.recop_texte_editable_tedinfo_tmplt_valid:
move.b (a4)+,(a3)+
move.b (a5)+,(a3)+
dbf d0,.recop_texte_editable_tedinfo_tmplt_valid
.pas_texte_editable_tedinfo_tmplt_valid:
move.l a3,GWVA_RSC_TMP_SAVE_PTR
.pas_texte_editable_text:
.pas_texte_editable:
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_BITBLK:1}
beq.s .pas_BITBLK
cmp.w #G_IMAGE,ob_type(a2)
bne.s .pas_image
move.l GWVA_RSC_TMP_SAVE_PTR,a3
move.l ob_spec(a2),a4
move.w #L_BITBLK/2-1,d0
.recop_bitblk:
move.w (a4)+,(a3)+
dbf d0,.recop_bitblk
move.l a3,GWVA_RSC_TMP_SAVE_PTR
.pas_image:
.pas_BITBLK:
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_ICONBLK:1}
beq.s .pas_ICONBLK
cmp.w #G_ICON,ob_type(a2)
bne.s .pas_icon
move.l GWVA_RSC_TMP_SAVE_PTR,a3
moveq #L_ICONBLK/2-1,d0
.recop_iconblk:
move.w (a4)+,(a3)+
dbf d0,.recop_iconblk
move.l a3,GWVA_RSC_TMP_SAVE_PTR
.pas_icon:
.pas_ICONBLK:
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_CICONBLK:1}
beq.s .pas_CICONBLK
cmp.w #G_CICON,ob_type(a2)
bne.s .pas_cicon
move.l GWVA_RSC_TMP_SAVE_PTR,a3
moveq #L_CICONBLK/2-1,d0
.recop_ciconblk:
move.w (a4)+,(a3)+
dbf d0,.recop_ciconblk
move.l a3,GWVA_RSC_TMP_SAVE_PTR
.pas_cicon:
.pas_CICONBLK:
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_APPLBLK:1}
beq.s .pas_APPLBLK
cmp.w #G_PROGDEF,ob_type(a2)
bne.s .pas_progdef
move.l GWVA_RSC_TMP_SAVE_PTR,a3
moveq #L_APPLBLK/2-1,d0
.recop_applblk:
move.w (a4)+,(a3)+
dbf d0,.recop_applblk
move.l a3,GWVA_RSC_TMP_SAVE_PTR
.pas_progdef:
.pas_APPLBLK:
move.w #GWVA_RSC_CTE_CONTINUE_GO_OVER,d7
rts
;------------------------------------------------------------------------------
; Method name : -
; Asm label : GWVA_RSC_RESTORE_TREE
; Description : Restauration d'un arbre ressource précédement sauvegardé
;
; Rq : -
;
; in : a0.l = pointeur sur un champ de sauvegarde
; in : d0.w = paramétre de la restauration
; GWVA_RSC_MASK_SAVE_STATE : sauve les objets RSC et le caractère des BOXCHAR
; GWVA_RSC_MASK_SAVE_TEDINFO : sauve les TEDINFO
; GWVA_RSC_MASK_SAVE_TEXT : sauve les textes non éditables sauf le caractère des icones
; GWVA_RSC_MASK_SAVE_FTEXT : sauve les textes editables (texte+mise en forme+champ de saisie)
; GWVA_RSC_MASK_SAVE_BITBLK : sauve les BITBLK
; GWVA_RSC_MASK_SAVE_ICONBLK : sauve les ICONBLK
; GWVA_RSC_MASK_SAVE_CICONBLK : sauve les CICONBLK
; GWVA_RSC_MASK_SAVE_APPLBLK : sauve les APPLBLK
; out : d7.w = GWVA_NO_ERROR_GENERIC, ou erreur
; GWVA_ERROR_GENERIC si on demande de restaurer des informations non sauvegardées
;
; 23/05/98 : Création
;------------------------------------------------------------------------------
GWVA_RSC_RESTORE_TREE:
tst.w d0
beq.s .pas_de_restauration
move.w GWVA_RSC_SAVE_PARAMETERS(a0),d1 ; paramètres de sauvegarde
or.w d0,d1
cmp.w GWVA_RSC_SAVE_PARAMETERS(a0),d1
bne.s .restauration_impossible ; on demande de restaurer des choses non sauvegardées
save.l a0/d0
move.w GWVA_RSC_SAVE_TREE_IDX(a0),d0
lea GWVA_RSC_TMP_ADD_TREE,a0
bsr GWVA_RSC_RETURN_PTR_ON_TREE
load.l a0/d0
move.w d0,GWVA_RSC_TMP_RESTORE_PARAMETER
move.w GWVA_RSC_SAVE_PARAMETERS(a0),GWVA_RSC_TMP_SAVE_PARAMETERS ; d2 paramètres de sauvegarde
move.l a0,GWVA_RSC_TMP_SAVE_PTR
add.l #GWVA_RSC_SAVE_HEADER_LENGTH,GWVA_RSC_TMP_SAVE_PTR
save.l a0
move.l GWVA_RSC_TMP_ADD_TREE,a0 ; adresse de base de l'arbre
move.l #GWVA_RSC_RESTORE_OBJECT,a1 ; routine à executer à chaque objet
move.l a0,a2
clr.w d0 ; numéro courant
moveq #-1,d1 ; numéro du pére du root
bsr GWVA_RSC_GO_OVER_TREE
load.l a0
.pas_de_restauration:
moveq #GWVA_NO_ERROR_GENERIC,d7
rts
.restauration_impossible:
move.w #GWVA_ERROR_GENERIC,d7
rts
;------------------------------------------------------------------------------
; Method name : -
; Asm label : GWVA_RSC_RESTORE_OBJECT
; Description : Restaure l'objet RSC en fonction des paramètres voulues
;
; Rq : -
;
; in : a2.l = pointeur sur l'objet RSC courant
; in : GWVA_RSC_TMP_SAVE_PARAMETER
; in : GWVA_RSC_TMP_RESTORE_PARAMETER
; in : GWVA_RSC_TMP_SAVE_PTR
; out : d7.w = GWVA_RSC_CTE_CONTINUE_GO_OVER
;
; 23/05/98 : Création
;------------------------------------------------------------------------------
GWVA_RSC_RESTORE_OBJECT:
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_STATE:1}
beq.s .pas_sauve_objet_de_base ; l'objet de base a-t-il été sauvé ?
move.l GWVA_RSC_TMP_SAVE_PTR,a3
add.l #L_OBJECT,GWVA_RSC_TMP_SAVE_PTR
bftst GWVA_RSC_TMP_RESTORE_PARAMETER{GWVA_RSC_OLBIT_SAVE_STATE:1}
beq.s .pas_restaure_objet_de_base ; l'objet de base doit-il être restauré
move.l a2,a4
move.w #L_OBJECT/2-1,d0
.recop_obj: move.w (a3)+,(a4)+
dbf d0,.recop_obj
.pas_restaure_objet_de_base:
.pas_sauve_objet_de_base:
;----
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_TEDINFO:1}
beq.s .pas_sauve_TEDINFO ; la structure TEDINFO a-t-elle été sauvée
move.l a2,a0
bsr GWVA_RSC_TEST_IF_TEDINFO_STRUCT_EXIST
cmp.w #GWVA_ERROR_GENERIC,d7
beq.s .pas_TEDINFO
move.l GWVA_RSC_TMP_SAVE_PTR,a3
add.l #L_TEDINFO,GWVA_RSC_TMP_SAVE_PTR
bftst GWVA_RSC_TMP_RESTORE_PARAMETER{GWVA_RSC_OLBIT_SAVE_TEDINFO:1}
beq.s .pas_restaure_TEDINFO ; doit-elle être restaurée
move.l ob_spec(a2),a4
move.w #L_TEDINFO/2-1,d0
.recop_tedinfo:
move.w (a3)+,(a4)+
dbf d0,.recop_tedinfo
.pas_restaure_TEDINFO:
.pas_TEDINFO:
.pas_sauve_TEDINFO:
;----
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_TEXT:1}
beq .pas_sauve_texte_normal ; les textes normaux ont-ils été sauvés
cmp.w #G_TEXT,ob_type(a2)
beq.s .texte_normal_tedinfo
cmp.w #G_BOXTEXT,ob_type(a2)
bne.s .pas_texte_normal_tedinfo
.texte_normal_tedinfo:
move.l GWVA_RSC_TMP_SAVE_PTR,a3
move.l ob_spec(a2),a4
move.w te_txtlen(a4),d0
ext.l d0
add.l d0,GWVA_RSC_TMP_SAVE_PTR
bftst GWVA_RSC_TMP_RESTORE_PARAMETER{GWVA_RSC_OLBIT_SAVE_TEXT:1}
beq.s .pas_restaure_texte_normal_tedinfo ; doivent-ils être restaurés
move.l te_ptext(a4),a4
sub.w #1,d0
bmi.s .pas_restaure_texte_normal_tedinfo
.recop_texte_normal_tedinfo:
move.b (a3)+,(a4)+
dbf d0,.recop_texte_normal_tedinfo
bra.s .pas_restaure_texte_normal_tedinfo
.pas_texte_normal_tedinfo:
cmp.w #G_BUTTON,ob_type(a2)
beq.s .texte_normal_string
cmp.w #G_TITLE,ob_type(a2)
beq.s .texte_normal_string
cmp.w #G_STRING,ob_type(a2)
bne.s .pas_texte_normal_string
.texte_normal_string:
move.l GWVA_RSC_TMP_SAVE_PTR,a3
move.l a3,a0
bsr GWVA_COUNT_BYTES_0
add.l #1,d0
add.l d0,GWVA_RSC_TMP_SAVE_PTR
bftst GWVA_RSC_TMP_RESTORE_PARAMETER{GWVA_RSC_OLBIT_SAVE_TEXT:1}
beq.s .pas_restaure_texte_normal_string ; doivent-ils être restaurés
move.l ob_spec(a2),a4
COPY_STRING_0 a3,a4
bra.s .pas_restaure_texte_normal_string
.pas_texte_normal_string:
cmp.w #G_BOXCHAR,ob_type(a2)
bne.s .pas_texte_normal_boxchar
move.l GWVA_RSC_TMP_SAVE_PTR,a3
add.l #1,GWVA_RSC_TMP_SAVE_PTR
bftst GWVA_RSC_TMP_RESTORE_PARAMETER{GWVA_RSC_OLBIT_SAVE_TEXT:1}
beq.s .pas_restaure_texte_normal_boxchar ; doivent-ils être restaurés
move.b (a3)+,ob_spec(a2)
.pas_restaure_texte_normal_boxchar:
.pas_restaure_texte_normal_string:
.pas_restaure_texte_normal_tedinfo
.pas_texte_normal_boxchar:
.pas_sauve_texte_normal:
;----
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_FTEXT:1}
beq.s .pas_sauve_texte_editable ; les textes éditables ont-ils été sauvés
cmp.w #G_FTEXT,ob_type(a2)
beq.s .texte_editable_tedinfo
cmp.w #G_FBOXTEXT,ob_type(a2)
bne.s .pas_texte_editable
.texte_editable_tedinfo:
move.l GWVA_RSC_TMP_SAVE_PTR,a3
move.l ob_spec(a2),a4
move.w te_txtlen(a4),d0
ext.l d0
add.l d0,GWVA_RSC_TMP_SAVE_PTR
move.w te_tmplen(a4),d0
ext.l d0
add.l d0,d0
add.l d0,GWVA_RSC_TMP_SAVE_PTR
bftst GWVA_RSC_TMP_RESTORE_PARAMETER{GWVA_RSC_OLBIT_SAVE_FTEXT:1}
beq.s .pas_restaure_texte_editable ; doivent-ils être restaurés
move.l ob_spec(a2),a4
move.w te_txtlen(a4),d0
move.l te_ptext(a4),a4
sub.w #1,d0
bmi.s .pas_restaure_texte_editable_tedinfo_txt
.recop_texte_editable_tedinfo_txt:
move.b (a3)+,(a4)+
dbf d0,.recop_texte_editable_tedinfo_txt
.pas_restaure_texte_editable_tedinfo_txt:
move.l ob_spec(a2),a4
move.w te_tmplen(a4),d0
move.l te_pvalid(a4),a5
move.l te_ptmplt(a4),a4
sub.w #1,d0
bmi.s .pas_restaure_texte_editable_tedinfo_tmplt_valid
.recop_texte_editable_tedinfo_tmplt_valid:
move.b (a3)+,(a4)+
move.b (a3)+,(a5)+
dbf d0,.recop_texte_editable_tedinfo_tmplt_valid
.pas_restaure_texte_editable_tedinfo_tmplt_valid
.pas_restaure_texte_editable:
.pas_texte_editable:
.pas_sauve_texte_editable:
;----
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_BITBLK:1}
beq.s .pas_sauve_bitblk ; les structures BITBLK ont-elles été sauvées
cmp.w #G_IMAGE,ob_type(a2)
bne.s .pas_bitblk
move.l GWVA_RSC_TMP_SAVE_PTR,a3
add.l #L_BITBLK,GWVA_RSC_TMP_SAVE_PTR
bftst GWVA_RSC_TMP_RESTORE_PARAMETER{GWVA_RSC_OLBIT_SAVE_BITBLK:1}
beq.s .pas_restaure_bitblk ; doivent-elles être restaurées
move.l ob_spec(a2),a4
move.w #L_BITBLK/2-1,d0
.recop_bitblk:
move.w (a3)+,(a4)+
dbf d0,.recop_bitblk
.pas_restaure_bitblk:
.pas_bitblk:
.pas_sauve_bitblk:
;----
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_ICONBLK:1}
beq.s .pas_sauve_iconblk ; les structures ICONBLK ont-elles été sauvées
cmp.w #G_ICON,ob_type(a2)
bne.s .pas_iconblk
move.l GWVA_RSC_TMP_SAVE_PTR,a3
add.l #L_ICONBLK,GWVA_RSC_TMP_SAVE_PTR
bftst GWVA_RSC_TMP_RESTORE_PARAMETER{GWVA_RSC_OLBIT_SAVE_ICONBLK:1}
beq.s .pas_restaure_iconblk ; doivent-elles être restaurées
move.l ob_spec(a2),a4
moveq #L_ICONBLK/2-1,d0
.recop_iconblk:
move.w (a3)+,(a4)+
dbf d0,.recop_iconblk
.pas_restaure_iconblk:
.pas_iconblk:
.pas_sauve_iconblk:
;----
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_CICONBLK:1}
beq.s .pas_sauve_ciconblk ; les structures CICONBLK ont-elles été sauvées
cmp.w #G_CICON,ob_type(a2)
bne.s .pas_ciconblk
move.l GWVA_RSC_TMP_SAVE_PTR,a3
add.l #L_CICONBLK,GWVA_RSC_TMP_SAVE_PTR
bftst GWVA_RSC_TMP_RESTORE_PARAMETER{GWVA_RSC_OLBIT_SAVE_CICONBLK:1}
beq.s .pas_restaure_ciconblk ; doivent-elles être restaurées
move.l ob_spec(a2),a4
moveq #L_CICONBLK/2-1,d0
.recop_ciconblk:
move.w (a3)+,(a4)+
dbf d0,.recop_ciconblk
.pas_restaure_ciconblk:
.pas_ciconblk:
.pas_sauve_ciconblk:
;----
bftst GWVA_RSC_TMP_SAVE_PARAMETERS{GWVA_RSC_OLBIT_SAVE_APPLBLK:1}
beq.s .pas_sauve_applblk ; les structures APPLBLK ont-elles été sauvées
cmp.w #G_PROGDEF,ob_type(a2)
bne.s .pas_applblk
move.l GWVA_RSC_TMP_SAVE_PTR,a3
add.l #L_APPLBLK,GWVA_RSC_TMP_SAVE_PTR
bftst GWVA_RSC_TMP_RESTORE_PARAMETER{GWVA_RSC_OLBIT_SAVE_APPLBLK:1}
beq.s .pas_restaure_applblk ; doivent-elles être restaurées
move.l ob_spec(a2),a4
moveq #L_APPLBLK/2-1,d0
.recop_applblk:
move.w (a3)+,(a4)+
dbf d0,.recop_applblk
.pas_restaure_applblk:
.pas_applblk:
.pas_sauve_applblk:
move.w #GWVA_RSC_CTE_CONTINUE_GO_OVER,d7
rts
;------------------------------------------------------------------------------
; Method name : -
; Asm label : GWVA_RSC_COPY_SAVED_TREE
; Description : Duplique la sauvegarde d'un arbre ressource
;
; Rq : -
;
; in : a0.l = pointeur sur la sauvegarde source
; in : a1.l = 0 (création de la copie par mxalloc) ou adresse d'un buffer de destination
; out : a0.l = pointeur sur la sauvegarde destination
; out : d7.w = GWVA_NO_ERROR_GENERIC ou GWVA_ERROR_MALLOC
;
; 06/06/98 : Création
;------------------------------------------------------------------------------
GWVA_RSC_COPY_SAVED_TREE:
cmp.l #0,a1
bne.s .pas_de_malloc
save.l a0
move.l GWVA_RSC_SAVE_SIZE(a0),d0
add.l #GWVA_RSC_SAVE_HEADER_LENGTH,d0
MXALLOC #MX_PREFTTRAM,d0
load.l a0
tst.l d0
beq.s .pas_de_memoire
move.l d0,a1
.pas_de_malloc:
save.l a1
move.l GWVA_RSC_SAVE_SIZE(a0),d0
add.l #GWVA_RSC_SAVE_HEADER_LENGTH,d0
move.l d0,d1
asr.l #2,d1
.recop_long:
beq.s .pas_de_mot_long
move.l (a0)+,(a1)+
sub.l #1,d1
bra.s .recop_long
.pas_de_mot_long:
move.l d0,d1
and.l #%11,d1
asr.w #1,d1
beq.s .pas_de_mot
move.w (a0)+,(a1)+
.pas_de_mot:
move.l d0,d1
and.l #%1,d1
beq.s .pas_de_octet
move.b (a0)+,(a1)+
.pas_de_octet:
load.l a0
moveq #GWVA_NO_ERROR_GENERIC,d7
rts
.pas_de_memoire:
move.w #GWVA_ERROR_MALLOC,d7
rts
;------------------------------------------------------------------------------
rsreset
GWVA_RSC_SAVE_TREE_IDX: rs.w 1
GWVA_RSC_SAVE_PARAMETERS: rs.w 1
GWVA_RSC_SAVE_SIZE: rs.l 1
GWVA_RSC_SAVE_HEADER_LENGTH: rs.w 0
;------------------------------------------------------------------------------
BSS
GWVA_RSC_TMP_SIZE: ds.l 1
GWVA_RSC_TMP_SAVE_PARAMETERS: ds.w 1
GWVA_RSC_TMP_RESTORE_PARAMETER: ds.w 1
GWVA_RSC_TMP_SAVE_PTR: ds.l 1
;------------------------------------------------------------------------------
TEXT